//
//  QDQDCodeSettingConfiguration.swift
//  QDMetroClient
//
//  Created by YueWen on 2019/3/29.
//  Copyright © 2019 YueWen. All rights reserved.
//

import UIKit


let QDQDCodeSettingConfigurationMetroKey = "qd_metro"
let QDQDCodeSettingConfigurationBusKey = "qd_bus"

/// 乘车码设置的配置类，现在用于掌管3D Touch的信息操作
final class QDCodeSettingConfiguration: NSObject {
    
    /// 乘车码设置的类型
    enum QDCodeSettingType: String {
        /// 地铁码优先
        case metro = "qd_metro"
        /// 公交码优先
        case bus = "qd_bus"
    }
    
    /// 单例对象
    static let share = QDCodeSettingConfiguration()
    
    /// 设置配置key
    private let settingConfigurationKey = "QDSettingConfigurationKey"
    private static let settingShortItemConfigurationKey = "settingShortItemConfigurationKey"
    
    
    private override init() {
        super.init()
    }
    
    
    /// 修改二维码优先显示的方式
    @discardableResult @objc static func changedCodeSettingTypeToOC(type: String = QDQDCodeSettingConfigurationMetroKey) -> Bool {
        return QDCodeSettingConfiguration.share.changedCodeSettingType(type: QDCodeSettingType(rawValue: type) ?? .metro)
    }
    
    /// 修改二维码优先显示的方式
    @discardableResult static func changedCodeSettingType(type: QDCodeSettingType = .metro) -> Bool {
        return QDCodeSettingConfiguration.share.changedCodeSettingType(type: type)
    }
    
    
    
    /// 获得二维码优先显示的方式
    @objc static func codeSettingTypeToOC() -> String {
        return QDCodeSettingConfiguration.share.codeSettingType().rawValue
    }
    

    /// 获得二维码优先显示的方式
    static func codeSettingType() -> QDCodeSettingType {
        return QDCodeSettingConfiguration.share.codeSettingType()
    }
    
    
    
    // 修改二维码优先显示的方式
    @discardableResult private func changedCodeSettingType(type: QDCodeSettingType = .metro) -> Bool {
        
        if !QDUserStatus.isLogin { return false } // 如果没有登陆
        UserDefaults.standard.set(type.rawValue, forKey: "\(QDUserInfoModelObjc.phone)_\(settingConfigurationKey)")//写入本地
        return true
    }
    
    
    /// 获得二维码优先显示的方式
    private func codeSettingType() -> QDCodeSettingType {
        
        /// 如果没有登陆
        if !QDUserStatus.isLogin { return .metro }
        
        let type = UserDefaults.standard.value(forKey: "\(QDUserInfoModelObjc.phone)_\(settingConfigurationKey)") as? String ?? QDQDCodeSettingConfigurationMetroKey
        
        return QDCodeSettingType(rawValue: type) ?? .metro
    }
    
    
    
    
    //MARK: 3D Touch
    
    /// 修改3D touch二维码优先显示的方式
    @objc static func changedCodeSettingTypeForShortItemToOC(type: String = QDQDCodeSettingConfigurationMetroKey){
         UserDefaults.standard.set(type, forKey: settingShortItemConfigurationKey)//写入本地
    }
    
    
    /// 获得3D touch二维码优先显示的方式
    @objc static func codeSettingTypeForShortItemToOC() -> String {
        
        guard let type = UserDefaults.standard.value(forKey: settingShortItemConfigurationKey) as? String, !type.isEmpty else {
            return QDQDCodeSettingConfigurationMetroKey //默认为地铁
        }
        
        return type
    }
    
    
    /// 删除本地存储的 3D touch二维码优先显示的方式 记录
    @objc static func removeSettingForShortItem() {
        UserDefaults.standard.removeObject(forKey: settingShortItemConfigurationKey)
    }
}

